#ifndef __VENUS_VERTEX_H__
#define __VENUS_VERTEX_H__

#include "../geometry/vector3.h"

namespace venus {
	class Vertex {
	public:
		Vertex() {};
		Vertex( const Vector3& a_Pos ) : _Pos( a_Pos ), _U( 0 ), _V( 0 ) { }
		Vertex( const Vector3 a_Pos, float a_U, float a_V ) : _Pos( a_Pos ), _U( a_U ), _V( a_V ) {}
		Vertex( float a_X, float a_Y, float a_Z ) : _Pos( a_X, a_Y, a_Z ), _U( 0 ), _V( 0 ) { }
		Vertex( float a_X, float a_Y, float a_Z , float a_U, float a_V ) : _Pos( a_X, a_Y, a_Z ), _U( a_U ), _V( a_V ) { }
		float GetU() const { return _U; }
		float GetV() const { return _V; }
		Vector3& GetNormal() { return _Normal; }
		const Vector3& GetNormal() const { return _Normal; }
		Vector3& GetPos() { return _Pos; }
		const Vector3& GetPos() const { return _Pos; }
		void SetUV( float U, float V ) { _U = U; _V = V; }
		void SetPos( const Vector3& Pos ) { _Pos = Pos; }
		void SetPos( float a_X, float a_Y, float a_Z ) { _Pos.x = a_X; _Pos.y = a_Y; _Pos.z = a_Z; }
		void SetNormal( const Vector3& N ) { _Normal = N; }
	private:
		Vector3 _Pos;
		Vector3 _Normal;
		float _U, _V;
	};
}

#endif//__VENUS_VERTEX_H__
